
package model;

import database.DBConnection;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import util.PropertiesManager;

public class ContaDAO implements OperacoesDAO{
    private Connection conexao;  
    
    public ContaDAO() throws ClassNotFoundException, SQLException {
        DBConnection db = new DBConnection();
        boolean teste = db.openConnection();
        if (teste == true) {
            conexao = db.getConexao();
        }
    }

    ContaDAO(Connection conexao) {
        this.conexao = conexao;
    }
    
    @Override
    public void inserir(Object obj) throws SQLException {
        
        if (obj instanceof Usuario) {
            Usuario usuario = (Usuario) obj;            
            String SQL = null;           
            PreparedStatement st = null;
                    
            if (obj instanceof Artista) {
                SQL = PropertiesManager.getProperty("insertByArtista.conta");
                st = conexao.prepareStatement(SQL);                
                st.setInt(1, ((Artista)usuario).getIdArtista());
                st.setInt(2, ((Artista)usuario).getContaArtista().getSaldo());
                
            } else {
                SQL = PropertiesManager.getProperty("insertByUsuario.conta");
                st = conexao.prepareStatement(SQL); 
                st.setInt(1, usuario.getId());            
                st.setInt(2, usuario.getContaUsuario().getSaldo()); 
                
            }            
            //System.out.println("EH USER");
            st.execute();   
        }
    }

    @Override
    public boolean excluir(Object obj) throws SQLException {
        throw new UnsupportedOperationException("Not supported ever.");
    }

    @Override
    public void editar(Object obj) throws SQLException {
        if (obj instanceof Usuario) {
            Usuario usuario = (Usuario) obj;            
            String SQL = null;           
            PreparedStatement st = null;
                    
            if (obj instanceof Artista) {
                SQL = PropertiesManager.getProperty("updateByArtista.conta");
                st = conexao.prepareStatement(SQL);                
                st.setInt(2, ((Artista)usuario).getIdArtista());
                st.setInt(1, ((Artista)usuario).getContaArtista().getSaldo());
                
            } else {
                SQL = PropertiesManager.getProperty("updateByUsuario.conta");
                st = conexao.prepareStatement(SQL); 
                st.setInt(2, usuario.getId());            
                st.setInt(1, usuario.getContaUsuario().getSaldo()); 
                
                
                System.out.println("EH USER");
            }            
            st.execute();   
        }
    }

    @Override
    public ArrayList pesquisarTudo() throws SQLException {
        throw new UnsupportedOperationException("Not supported ever.");
    }
    
    public int getSaldoByUsuario(Usuario usuario) throws SQLException{
        if (usuario != null) {
            String SQL = PropertiesManager.getProperty("selectByUsuario.conta");            
            PreparedStatement st = conexao.prepareStatement(SQL);           
            
            st.setInt(1, usuario.getId());
            ResultSet res = st.executeQuery();   
            int saldo = 0;
            while (res.next()) {                
                saldo = res.getInt("saldo");
            }            
            return saldo;                
        }
        return 0;
    }
    
    public int getSaldoByArtista(Artista artista) throws SQLException{
        if (artista != null) {
            String SQL = PropertiesManager.getProperty("selectByArtista.conta");            
            PreparedStatement st = conexao.prepareStatement(SQL);           
            
            st.setInt(1, artista.getIdArtista());
            ResultSet res = st.executeQuery();   
            int saldo = 0;
            while (res.next()) {                
                saldo = res.getInt("saldo");
            }            
            return saldo;                
        }
        return 0;
    }
}
